home *** CD-ROM | disk | FTP | other *** search
/ Aminet 19 / Aminet 19 (1997)(GTI - Schatztruhe)[!][Jun 1997].iso / Aminet / mods / misc / CUST_Agony_MON.lha / Agony_MON / AgonyCommon.s < prev    next >
Text File  |  1997-04-06  |  6KB  |  328 lines

  1. *
  2. * Common part for Agony's custom modules by Jeroen Tel
  3. *
  4.  
  5.  
  6.     IFEQ    AGO_TEST-0            ; COMPLETE VERSION
  7.  
  8.  
  9. AGO_StructAnalyzer            ; transmis à EaglePlayer pour gérer
  10.     ds.l    UPS_SizeOF        ; les analyzers
  11.  
  12.  
  13.  
  14. *-----------------------------------------------------------------------*
  15. ;
  16. ; Init Player
  17.  
  18. InitPlay
  19.     move.l    dtg_AudioAlloc(a5),a0        ; Function
  20.     jmp    (a0)
  21.  
  22.  
  23. *-----------------------------------------------------------------------*
  24. ;
  25. ; End Player
  26.  
  27. EndPlay
  28.     move.l    dtg_AudioFree(a5),a0        ; Function
  29.     jmp    (a0)
  30.  
  31.  
  32. *-----------------------------------------------------------------------*
  33. ;
  34. ; Init Custom Replay Routine
  35.  
  36. AGO_init
  37.     move.w    dtg_SndNum(a5),d0    ; sub song nbr (1..7)
  38.     bra    AGO_InitSong
  39.  
  40.  
  41.  
  42. *-----------------------------------------------------------------------*
  43. ;
  44. ; Clear Audio Reg.
  45.  
  46. AGO_end
  47.     move.w    #$f,$dff096
  48.     clr.w    $dff0a8
  49.     clr.w    $dff0b8
  50.     clr.w    $dff0c8
  51.     clr.w    $dff0d8
  52.     rts
  53.  
  54.  
  55.  
  56. *-----------------------------------------------------------------------*
  57. ;
  58. ; Interrupt routine called every 1/80 s
  59.  
  60. AGO_Play
  61.     bra    AGO_InterVBL
  62.  
  63.  
  64.  
  65. *-----------------------------------------------------------------------*
  66. ;
  67. ; Returns min and max sub song
  68.  
  69. AGO_SubSongRange
  70.     moveq    #1,d0            ; min
  71.     moveq    #1,d1            ; max
  72.  
  73.     rts
  74.  
  75.  
  76. *-----------------------------------------------------------------------*
  77. ;
  78. ; Set Volume
  79.  
  80. AGO_Volume
  81.     move.w    dtg_SndLBal(a5),d0    ; Vol Left
  82.     mulu    dtg_SndVol(a5),d0    ; Vol Max
  83.     lsr.w    #6,d0
  84.     move.w    d0,AGO_MasterVolA    ; final Vol Left
  85.     move.w    d0,AGO_MasterVolD
  86.  
  87.     move.w    dtg_SndRBal(a5),d0
  88.     mulu    dtg_SndVol(a5),d0
  89.     lsr.w    #6,d0
  90.     move.w    d0,AGO_MasterVolB
  91.     move.w    d0,AGO_MasterVolC
  92.  
  93.     rts
  94.  
  95.  
  96. *-----------------------------------------------------------------------*
  97. ;
  98. ; Set DMA Voices
  99.  
  100. AGO_SetVoices
  101.     or.w    #$8000,d0
  102.     move.w    d0,AGO_DMA_EP    ; bit=1 <=> voice is ON
  103.  
  104.     rts
  105.  
  106.  
  107. *-----------------------------------------------------------------------*
  108. ;
  109. ; Returns address of the UPS structure to EaglePlayer
  110.  
  111. AGO_StructInit
  112.     lea    AGO_StructAnalyzer(pc),a0
  113.     rts
  114.  
  115.  
  116.  
  117. *-----------------------------------------------------------------------*
  118.  
  119.  
  120.     ELSEIF                ; TESTVERSION
  121.  
  122.  
  123. ;-------
  124. ; Small code to test the player under a debugger
  125.  
  126. AGO_Debug
  127.     moveq    #1,d0
  128.     bsr    AGO_InitSong
  129.  
  130.     move.l    $6c.w,Jmp+2
  131.     move.l    #Vbl,$6c.w
  132.     rts
  133.  
  134.  
  135. End
  136. ;;    bsr    StopSong
  137.     move.l    Jmp+2(pc),$6c.w
  138.     move.w    #$f,$dff096
  139.     rts
  140.  
  141.  
  142. Vbl
  143.     btst    #5,$dff01f
  144.     beq.s    Jmp
  145.  
  146. .wa    cmp.b    #70,$dff006
  147.     blt.s    .wa
  148.  
  149.     move.w    #$f00,$dff180
  150.  
  151.     movem.l    d0-a6,-(a7)
  152.     bsr    AGO_InterVBL
  153.     movem.l    (a7)+,d0-a6
  154.  
  155.     move.w    #$345,$dff180
  156.  
  157. Jmp    jmp    0.l
  158.  
  159.  
  160.  
  161.  
  162. AGO_StructAnalyzer            ; transmis à EaglePlayer pour gérer
  163.     ds.l    UPS_SizeOF        ; les analyzers
  164.  
  165.  
  166.     ENDC
  167.  
  168.  
  169.  
  170. ;------------------------------------------------------------------------
  171. ; Données pour EaglePlayer / Delitracker
  172.  
  173. AGO_DMA_EP    dc.w    %1111+$8000    ; voix actives depuis EaglePlayer
  174.  
  175. AGO_MasterVolA    dc.w    64        ; 0 .. 64
  176. AGO_MasterVolB    dc.w    64
  177. AGO_MasterVolC    dc.w    64
  178. AGO_MasterVolD    dc.w    64
  179.  
  180. AGO_StructA    dc.l    AGO_StructAnalyzer
  181. AGO_StructB    dc.l    AGO_StructAnalyzer+UPS_Modulo
  182. AGO_StructC    dc.l    AGO_StructAnalyzer+UPS_Modulo*2
  183. AGO_StructD    dc.l    AGO_StructAnalyzer+UPS_Modulo*3
  184.  
  185. AGO_OldPer1    dc.w    -1
  186. AGO_OldPer2    dc.w    -1
  187. AGO_OldPer3    dc.w    -1
  188. AGO_OldPer4    dc.w    -1
  189.  
  190.  
  191.  
  192. ;-----------------------------------------------------------------------
  193. ; Agony InGame Musics.
  194. ; Original musics by Jeroen Tel / MON in 1990.
  195. ; Relocated on 06/04/97 by Mr.STYCKX
  196. ;
  197. ; AGO_InitSong : D0 = - 
  198. ; AGO_InterVBL : called every VBL
  199. ;
  200.  
  201.  
  202.  
  203. ;-----------------------------------------------------------------------
  204. ; Init la subsong D0
  205.  
  206. AGO_InitSong
  207.     bsr    RelocMus
  208.  
  209.     lea    MusicData(pc),a0
  210.     move.l    #$61000000,d0
  211.  
  212.     lea    SetON(pc),a1
  213.     lea    DMAON_-ABS_START+2(a0),a2
  214.     sub.l    a2,a1
  215.     move.w    a1,d0
  216.     move.l    d0,-2(a2)        ; bsr SetON
  217.  
  218.     lea    SetOFF(pc),a1
  219.     lea    DMAOFF_-ABS_START+2(a0),a2
  220.     sub.l    a2,a1
  221.     move.w    a1,d0
  222.     move.l    d0,-2(a2)        ; bsr SetOFF
  223.  
  224.     lea    SetPer(pc),a1
  225.     lea    PER_-ABS_START+2(a0),a2
  226.     sub.l    a2,a1
  227.     move.w    a1,d0
  228.     move.l    d0,-2(a2)        ; bsr SetPer
  229.  
  230.     lea    SetVol(pc),a1
  231.     lea    VOL_-ABS_START+2(a0),a2
  232.     sub.l    a2,a1
  233.     move.w    a1,d0
  234.     move.l    d0,-2(a2)        ; bsr SetVol
  235.  
  236.     lea    SetStart(pc),a1
  237.     lea    START_-ABS_START+2(a0),a2
  238.     sub.l    a2,a1
  239.     move.w    a1,d0
  240.     move.l    d0,-2(a2)        ; bsr SetStart
  241.  
  242.     lea    SetLen(pc),a1
  243.     lea    LEN_-ABS_START+2(a0),a2
  244.     sub.l    a2,a1
  245.     move.w    a1,d0
  246.     move.l    d0,-2(a2)        ; bsr SetLen
  247.  
  248.     lea    SetRStart(pc),a1
  249.     lea    RSTART_-ABS_START+2(a0),a2
  250.     sub.l    a2,a1
  251.     move.w    a1,d0
  252.     move.l    d0,-2(a2)        ; bsr SetRStart
  253.  
  254.     lea    SetRLen(pc),a1
  255.     lea    RLEN_-ABS_START+2(a0),a2
  256.     sub.l    a2,a1
  257.     move.w    a1,d0
  258.     move.l    d0,-2(a2)        ; bsr SetRLen
  259.  
  260.  
  261.     bra    MusicData+INIT_-ABS_START
  262.     
  263.  
  264.  
  265. ;-----------------------------------------------------------------------
  266. ; Routine appelée à chaque VBL
  267.  
  268. AGO_InterVBL
  269.     movem.l    D0/A0,-(SP)
  270.  
  271.     lea    AGO_StructAnalyzer(pc),a0
  272.     move.w    #-1,UPS_Enabled(a0)
  273.     move.w    #UPSB_Adr!UPSB_Len!UPSB_Per!UPSB_Vol!UPSB_DMACon,UPS_Flags(a0)
  274.  
  275.     move.w    UPS_Voice1Per(a0),AGO_OldPer1
  276.     move.w    UPS_Voice2Per(a0),AGO_OldPer2
  277.     move.w    UPS_Voice3Per(a0),AGO_OldPer3
  278.     move.w    UPS_Voice4Per(a0),AGO_OldPer4
  279.  
  280.     clr.w    UPS_Voice1Per(a0)
  281.     clr.w    UPS_Voice2Per(a0)
  282.     clr.w    UPS_Voice3Per(a0)
  283.     clr.w    UPS_Voice4Per(a0)
  284.  
  285.     move.w    AGO_DMA_EP(pc),d0
  286.     move.w    d0,UPS_DMACon(a0)
  287.     not.w    d0
  288.     and.w    #$f,d0
  289.     move.w    d0,$dff096        ; stop voices from EP
  290.  
  291.     bsr    MusicData+VBL_-ABS_START
  292.  
  293.     ; La replay de Nebulus remet la période à chaque VBL,ce qui perturbe
  294.     ; les analyzers. On ne transmet donc une période que si elle est
  295.     ; différente de la VBL précédente.
  296.  
  297.     lea    AGO_StructAnalyzer(pc),a0
  298.     move.w    UPS_Voice1Per(a0),d0
  299.     cmp.w    AGO_OldPer1(pc),d0    ; nouvelle fréquence
  300.     bne.s    .2            ; oui
  301.     clr.w    UPS_Voice1Per(a0)    ; non, on remet a 0
  302.  
  303. .2    move.w    UPS_Voice2Per(a0),d0
  304.     cmp.w    AGO_OldPer2(pc),d0
  305.     bne.s    .3
  306.     clr.w    UPS_Voice2Per(a0)
  307.  
  308. .3    move.w    UPS_Voice3Per(a0),d0
  309.     cmp.w    AGO_OldPer3(pc),d0
  310.     bne.s    .4
  311.     clr.w    UPS_Voice3Per(a0)
  312.  
  313. .4    move.w    UPS_Voice4Per(a0),d0
  314.     cmp.w    AGO_OldPer4(pc),d0
  315.     bne.s    .0
  316.     clr.w    UPS_Voice4Per(a0)
  317. .0
  318.  
  319.     clr.w    UPS_Enabled(a0)
  320.  
  321.     movem.l    (SP)+,D0/A0
  322.     rts
  323.  
  324.  
  325.  
  326. ;-----------------------------------------------------------------------
  327. ; END
  328.